package util

import (
	"regexp"
)

var (
	upSliceMap = map[string]string{"0": "零", "1": "壹", "2": "贰", "3": "叁", "4": "肆", "5": "伍", "6": "陆", "7": "柒", "8": "捌", "9": "玖"}
	sliceUnit  = []string{"仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "元", "", "角", "分"}
)

func NumberToUp(strNum string) (string, error) {
	strRune := []rune(strNum)
	s := sliceUnit[len(sliceUnit)-len(strRune):]
	str := ""

	for k, v := range strRune {
		str = str + upSliceMap[string(v)] + s[k]
	}
	var reg *regexp.Regexp
	var err error
	if reg, err = regexp.Compile(`零角零分$`); err != nil {
		return "零元", err
	}
	str = reg.ReplaceAllString(str, "整")

	if reg, err = regexp.Compile(`零角`); err != nil {
		return "零元", err
	}
	str = reg.ReplaceAllString(str, "零角")

	if reg, err = regexp.Compile(`零分$`); err != nil {
		return "零元", err
	}

	str = reg.ReplaceAllString(str, "整")

	if reg, err = regexp.Compile(`零[仟佰拾]`); err != nil {
		return "零元", err
	}

	str = reg.ReplaceAllString(str, "零")

	if reg, err = regexp.Compile(`零{2,}`); err != nil {
		return "零元", err
	}
	str = reg.ReplaceAllString(str, "零")

	if reg, err = regexp.Compile(`零亿`); err != nil {
		return "零元", err
	}
	str = reg.ReplaceAllString(str, "亿")

	if reg, err = regexp.Compile(`零万`); err != nil {
		return "零元", err
	}
	str = reg.ReplaceAllString(str, "万")

	if reg, err = regexp.Compile(`零*元`); err != nil {
		return "零元", err
	}
	str = reg.ReplaceAllString(str, "元")

	if reg, err = regexp.Compile(`亿零{0, 3}万`); err != nil {
		return "零元", err
	}
	str = reg.ReplaceAllString(str, "^元")

	if reg, err = regexp.Compile(`零元`); err != nil {
		return "零元", err
	}

	str = reg.ReplaceAllString(str, "零")

	if str == "整" {
		return "零元", nil
	}
	return str, nil
}
